package com.xyh.springboot.exception;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

/**
 * @Author:kyle
 * @Date:2020/12/28 - 17:03
 * @Project:springboot
 * @Package:com.xyh.springboot.exception
 * @Version:1.0
 * 第二种处理异常方式--全局异常处理
 * 第一种处理异常方式的做法需要在每个Controller类中加入异常注入，肯定是不可取的，
 * 对于异常的处理，当然是最好全局都能用最好，
 * SpringBoot为我们提供了`@ControllerAdvice`来解决这个问题,
 * 其实就是将之前写在单独Controller里面的**ExceptionHandler集中移入到一个类中进行处理**
 */

//@ControllerAdvice
public class GlobalExceptionAdvice {

    // 空指针异常
    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView handleNullPointerException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e);
        mv.setViewName("error");
        System.out.println("==GlobalExceptionAdvice.handleNullPointerException==");
        System.out.println("e = " + e);
        return mv;
    }

    // 算术异常
    @ExceptionHandler(value = {java.lang.ArithmeticException.class})
    public ModelAndView handleArithmeticException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e);
        mv.setViewName("error");

        System.out.println("e = " + e);
        return mv;
    }
}
